{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 976,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import networkx as nx  # 图数据挖掘\n",
    "\n",
    "# 数据分析\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "import random  # 随机数\n",
    "\n",
    "from sklearn.decomposition import PCA\n",
    "from sklearn.manifold import TSNE\n",
    "from tqdm import tqdm  # 进度条\n",
    "\n",
    "# 数据可视化\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 977,
   "outputs": [],
   "source": [
    "edges = pd.DataFrame()\n",
    "edges['sources'] = ['东方曜','西施','东方曜','东方曜','东方曜','墨子','东方曜','老夫子','老夫子','钟无艳']\n",
    "edges['targets'] = ['西施','鲁班大师','庄周','蒙犽','墨子','孙膑','老夫子','钟无艳','典韦','典韦']\n",
    "edges['weights'] = [1,1,1,1,1,1,1,1,1,1]"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 978,
   "outputs": [],
   "source": [
    "G = nx.from_pandas_edgelist(edges,source='sources',target='targets',edge_attr=True,create_using=nx.Graph())"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 979,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 576x504 with 1 Axes>",
      "image/png": "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N4oTYCIWi0VPPPGERo8erb59++qHH34wOpJXYKnO8xwOh2bPnq24uDhZLBbt2rVLN910E4e2wufx9QXAhB566CGFhYWpb9+++uKLL9SuXTujIxnG4XCopKSE4uRBOTk5Sk1NVVFRkT799FP16NHD6EiAyzBxAkzq73//u/75z38qISFB27dvNzqOYUpLSxUSEqLg4GCjo5heWVmZHnnkEfXp00fXXnutNmzYQGmC6TBxAkxs/Pjxaty4sQYNGqSFCxeqe/fuRkfyOPY3ecaSJUt01113qUePHsrOzlbr1q2NjgS4BcUJMLlRo0apcePGGjp0qD7++GP16dPH6Egexf4m98rLy9M999yjbdu2aebMmRo8eLDRkQC3YqkO8AN/+9vf9P7772v48OFavny50XE8iqMI3MNut+uFF15Q586ddckll2j79u2UJvgFJk6Anxg0aJAWLFig4cOH6/XXX9c111xjdCSPYKnO9dauXas77rhDZ599tr7++mu//vIB/A/FCfAjl19+uZYsWaKrrrpKv/32m2644QajI7kdS3Wu88svv+h//ud/tHjxYj3//PMaOXIkxwvA77BUB/iZbt26afny5XrggQf05ptvGh3H7Zg4NZzD4dC7776ruLg4hYSEaNeuXRo1ahSlCX6JiRPghy655BKtWrVKgwYNUmlpqe655x6jI7kNE6eG2blzp1JTU3Xs2DEtWrRI3bp1MzoSYCgmToCfateunbKysjR16lQ9+eSTRsdxGyZO9fPbb7/poYceUkJCgq6//nqtX7+e0gSI4gT4tTZt2igrK0vvv/++Hn74YTkcDqMjuRwTp7pbuHCh4uLitH//fm3fvl0TJ05UYGCg0bEAr8BSHeDnWrdurdWrVysxMVHHjh3Tiy++qIAA83ym4jgC5+3fv1933323du/erTfeeEMDBw40OhLgdczztyOAeouIiNDKlSv1zTff6NZbb1VlZaXRkVyGpbrTq6io0LPPPqv4+Hh17dpV27ZtozQBf4HiBECS1KxZMy1btkzff/+9UlJSVFFRYXQkl2Cp7tS+/PJLxcfHa8WKFVq3bp0effRRhYSEGB0L8FoUJwA1wsLCtHjxYh09elTJyckqLy83OlKDMXE6ucOHD2vChAkaNWqUJk+erM8++0zR0dFGxwK8HsUJQC2hoaGaP3++GjVqpL/97W86duyY0ZEahIlTbVVVVXrzzTd18cUXq2nTptq1a5euu+46zmQCnGRxmPFrNAAazG6365ZbbtG+ffu0aNEiny0fYWFhys/PV9OmTY2OYrjt27frzjvvVEVFhWbOnKkuXboYHQnwOUycAJxUUFCQ3nrrLXXs2FEDBw7UkSNHjI5UZxUVFSorK1NYWJjRUQxVWlqqBx98UAMGDFBKSoq+/vprShNQTxQnAH8pICBAr7zyivr376+EhAQVFBQYHalOSkpKFB4e7rfLUA6HQ5988okuvvhiHTp0SNu3b9cdd9zBmUxAA3COE4BTslgsevrpp9W0aVP17dtXK1asUFRUlNGxnOLPG8N/+OEH/f3vf1dubq7eeecd9e/f3+hIgCkwcQJwWhaLRY8++qjuuOMO9e3bV7m5uUZHcoo/bgw/fvy4/v3vf6tbt2669NJLlZ2dTWkCXIiJEwCn3XfffWrSpIkSEhK0bNkyxcXFGR3plPxt4pSZmanU1FSdf/752rBhgy688EKjIwGmQ3ECUCe33367mjRpogEDBmjx4sWKj483OtJf8peJU2FhoR588EGtXLlSU6ZM0bBhw/x2XxfgbizVAaizlJQUTZs2TUOGDNHatWuNjvOXzD5xqqqq0muvvaaLL75YzZs3186dOzV8+HBKE+BGTJwA1Mvw4cMVGhqqv/3tb/rwww91xRVXGB3pT8w8ccrOztadd94pSVq+fLk6depkcCLAPzBxAlBvV155pebNm6eRI0dq8eLFRsf5k+LiYtMVp6NHj+q+++7ToEGDNG7cOH355ZeUJsCDKE4AGiQhIUELFy7U+PHjlZGRYXScWsy0VOdwOPTxxx8rLi5Ov/zyi3bu3Klbb71VAQH8NQ54Ekt1ABqsV69eWrp0qa688kr99ttvGjNmjNGRJJ1YqvP2b/4547vvvtNdd92lH3/8Ue+//7769u1rdCTAb/FRBYBLdO7cWStXrlRaWppmzJhhdBxJvj9xstlsSk9PV48ePdSvXz9t2bKF0gQYjIkTAJeJjY1VZmamBg4cqGPHjumBBx4wNI8vbw5ftWqV7rzzTrVr104bN27U+eefb3QkAKI4AXCxCy+8UFlZWRo4cKBKS0v12GOPGfb1eF+cOB06dEgPPPCAsrKy9PLLL+uaa64xOhKA32GpDoDLRUZGKjMzUwsWLNCDDz4oh8NhSA5fmjhVVlZqxowZuuSSS9SqVSvt3LmT0gR4IYvDqL/RAJjeL7/8oiFDhqhr166aNm2ax78BFhERoR07duicc87x6PvW1ebNm3XnnXeqUaNGmjFjhjp06GB0JAB/gYkTALc566yz9MUXX2jXrl26+eabZbfbPfbeDofD689xKikp0T333KMrr7xSt99+uzIzMylNgJejOAFwq/DwcH322Wc6dOiQRo0apePHj3vkfcvKyhQQECCr1eqR96sLh8Ohjz76SHFxcTp27Jh27typ8ePHcyYT4ANYqgPgETabTaNGjZLNZtPHH3+s0NBQt75ffn6+unTpooKCAre+T13l5uZq4sSJOnjwoGbOnKnevXsbHQlAHfDxBoBHhISE6KOPPtKZZ56ppKQkHT161K3v520bw202m/73f/9XvXr10qBBg7R582ZKE+CDKE4APCY4OFjvvfeeoqOjNXjwYP36669uey9vOorgiy++0CWXXKItW7Zo8+bNeuCBBxQcHGx0LAD1QHEC4FGBgYF67bXX1KtXL11xxRUqLCx0y/t4w8SpoKBAN954o2655RY9//zzWrBggc477zxDMwFoGIoTAI+zWCx64YUXdNVVV6lv37766aefXP4eRn6jrrKyUq+88oouueQStWnTRjt37tTVV19tSBYArsXJ4QAMYbFY9PjjjyssLEx9+/bVihUrXHqtiFFLdRs3btQdd9yhJk2aKDMz0xSXDAP4L4oTAEP94x//UJMmTdS3b18tX75c7du3d8lzPb1UV1xcrLS0NGVkZOjpp5/WmDFjDLtqBoD7sFQHwHB33XWX/vWvf6l///7atm2bS57pqYmTw+HQnDlzFBcXp4qKCu3atUtjx46lNAEmxcQJgFcYN26cGjdurEGDBmnRokXq3r17g55XVFSkli1buijdye3du1epqak6fPiwMjIydOmll7r1/QAYj4kTAK8xcuRIvfHGGxo6dKiysrIa9Cx3TpzKy8v12GOP6bLLLtPQoUO1ceNGShPgJyhOALzK1VdfrQ8++EAjRozQsmXL6v0cd+1xWrp0qTp06KCdO3dq69atmjRpkoKCGN4D/oLiBMDrDBw4UJ988olSUlL0ySef1OsZrj6O4ODBgxo5cqTuvPNOvfzyy8rIyFBkZKTLng/AN1CcAHil3r1767PPPtMdd9yhDz74oM6vd9VSnd1u10svvaROnTrp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b4yOAsDLUJzgEr/88os2bNhQU5I2bNggq9VaqyR17dpVYWFhtV7nim/VhQQF6Ot/XOGWO+zgnyorK3XBBRdo0aJF6tixo9FxAHgRihPqzGazKTs7u6YgrV+/XgUFBeratat69uypHj16qGfPnk4fItjQc5wS487RzJRudX8xcAqTJ09WcXGxXnrpJaOjAPAiFCecksPh0L59+2qVpO3btys6OrpWSYqLi1NgYGC93sOVJ4cDrvL999+rR48eysvLU0gI00wAJ1CcUMuRI0e0YcOGmpK0YcMGhYaG1ipJJ1tyayh33FUHNNTAgQN16623auTIkUZHAeAlKE5+7PdLbtX/HDp0SN26daspST179lTr1q09kudEecpRub3ylMt2FotkDQpUWlIMpQluNWfOHL399ttatmyZ0VEAeAmKk5/4/ZJb9T87duzQRRddVKskxcbG1nvJzRW25RVp+upcrdpTKItOHG5ZzRoUIIek/u0jlJoQzfIc3K68vFyRkZHatGkT9x4CkERxMq3qJbfff8utSZMmtUpS165d1aRJE6OjntSRUpsyNucpJ/+oSsorFG4NVkyrpkqOj+Tbc/Cov//972rRooUee+wxo6MA8AIUJxOw2WzaunVrrWnSzz//rG7dutU6DqBVq1ZGRwV8ztatW3Xttdfqu+++4+JfABQnX+NwOJSbm/unJbd27drVKkkxMTGGLrkBZhIfH6+nn35agwYNMjoKAINRnLzc4cOHa33DrXrJ7fclKT4+3muX3AAzmDZtmtasWcM1LAAoTt6kvLy8ZsmtuiwVFhbWWnLr0aMHS26Ah/3666+64IILtG/fPjVv3tzoOAAMRHEyiMPh0Lfffltr8/bOnTtPuuTGvgrAeDfddJN69uypu+++2+goAAxk2uJ0uNSmjE15yikoUUm5XeHWIMW0DNd1XY35Vtbhw4drTZI2bNigpk2b/mnJrXHjxh7PBuD0Vq5cqUmTJmnr1q2yWCxGxwFgENMVp+wDRZq2OleZewslqdblsdXnACW0j1Bqv2h1imrmlgzl5eXasmVLreMADh8+rO7du9dacmvZsqVb3h+A61VVVSk6OlofffSRunXjbkTAX5mqOBlx8nRVVZW+/fbbWiVp165dat++fa2SxJIb4PueeOIJ/fTTT5oxY4bRUQAYxDTFyVN3nRUWFtYqSd98843Cw8Nr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\n"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,7))\n",
    "nx.draw(G)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 980,
   "outputs": [],
   "source": [
    "def get_randomwalk(node, path_length):\n",
    "    \"\"\"\n",
    "    输入起始节点和路径长度，生成随机游走节点序列\n",
    "    :param node:\n",
    "    :param path_length:\n",
    "    :return:\n",
    "    \"\"\"\n",
    "\n",
    "\n",
    "    random_walk = [node]\n",
    "\n",
    "    for i in range(path_length - 1):\n",
    "        # 汇总邻接节点\n",
    "        temp = list(G.neighbors(node))\n",
    "        temp = list(set(temp) - set(random_walk))\n",
    "        if len(temp) == 0:\n",
    "            break\n",
    "        # 从邻接节点中随机选择下一个节点\n",
    "        random_node = random.choice(temp)\n",
    "        random_walk.append(random_node)\n",
    "        node = random_node\n",
    "\n",
    "    return random_walk"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 981,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['东方曜', '西施', '鲁班大师', '庄周', '蒙犽', '墨子', '孙膑', '老夫子', '钟无艳', '典韦']\n"
     ]
    }
   ],
   "source": [
    "all_nodes = list(G.nodes())\n",
    "print(all_nodes)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 982,
   "outputs": [
    {
     "data": {
      "text/plain": "['庄周', '东方曜', '墨子', '孙膑']"
     },
     "execution_count": 982,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "get_randomwalk('庄周', 5)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 983,
   "outputs": [],
   "source": [
    "gamma = 10  # 每个节点作为起始点生成随机游走序列个数\n",
    "walk_length = 5  # 随机游走序列最大长度"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 984,
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 10/10 [00:00<00:00, 3342.07it/s]\n"
     ]
    }
   ],
   "source": [
    "random_walks = []\n",
    "\n",
    "for n in tqdm(all_nodes):  # 遍历每个节点\n",
    "    for i in range(gamma):  # 每个节点作为起始点生成gamma个随机游走序列\n",
    "        random_walks.append(get_randomwalk(n, walk_length))"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 985,
   "outputs": [
    {
     "data": {
      "text/plain": "100"
     },
     "execution_count": 985,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 生成随机游走序列个数\n",
    "len(random_walks)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 986,
   "outputs": [
    {
     "data": {
      "text/plain": "[['东方曜', '墨子', '孙膑'],\n ['东方曜', '蒙犽'],\n ['东方曜', '庄周'],\n ['东方曜', '西施', '鲁班大师'],\n ['东方曜', '蒙犽'],\n ['东方曜', '墨子', '孙膑'],\n ['东方曜', '蒙犽'],\n ['东方曜', '蒙犽'],\n ['东方曜', '老夫子', '钟无艳', '典韦'],\n ['东方曜', '老夫子', '钟无艳', '典韦'],\n ['西施', '鲁班大师'],\n ['西施', '东方曜', '庄周'],\n ['西施', '东方曜', '蒙犽'],\n ['西施', '鲁班大师'],\n ['西施', '东方曜', '墨子', '孙膑'],\n ['西施', '东方曜', '墨子', '孙膑'],\n ['西施', '鲁班大师'],\n ['西施', '鲁班大师'],\n ['西施', '东方曜', '墨子', '孙膑'],\n ['西施', '鲁班大师'],\n ['鲁班大师', '西施', '东方曜', '墨子', '孙膑'],\n ['鲁班大师', '西施', '东方曜', '蒙犽'],\n ['鲁班大师', '西施', '东方曜', '墨子', '孙膑'],\n ['鲁班大师', '西施', '东方曜', '墨子', '孙膑'],\n ['鲁班大师', '西施', '东方曜', '老夫子', '典韦'],\n ['鲁班大师', '西施', '东方曜', '庄周'],\n ['鲁班大师', '西施', '东方曜', '墨子', '孙膑'],\n ['鲁班大师', '西施', '东方曜', '庄周'],\n ['鲁班大师', '西施', '东方曜', '老夫子', '钟无艳'],\n ['鲁班大师', '西施', '东方曜', '老夫子', '钟无艳'],\n ['庄周', '东方曜', '老夫子', '钟无艳', '典韦'],\n ['庄周', '东方曜', '老夫子', '钟无艳', '典韦'],\n ['庄周', '东方曜', '蒙犽'],\n ['庄周', '东方曜', '蒙犽'],\n ['庄周', '东方曜', '蒙犽'],\n ['庄周', '东方曜', '老夫子', '典韦', '钟无艳'],\n ['庄周', '东方曜', '墨子', '孙膑'],\n ['庄周', '东方曜', '墨子', '孙膑'],\n ['庄周', '东方曜', '老夫子', '典韦', '钟无艳'],\n ['庄周', '东方曜', '西施', '鲁班大师'],\n ['蒙犽', '东方曜', '老夫子', '典韦', '钟无艳'],\n ['蒙犽', '东方曜', '墨子', '孙膑'],\n ['蒙犽', '东方曜', '老夫子', '典韦', '钟无艳'],\n ['蒙犽', '东方曜', '老夫子', '钟无艳', '典韦'],\n ['蒙犽', '东方曜', '西施', '鲁班大师'],\n ['蒙犽', '东方曜', '老夫子', '典韦', '钟无艳'],\n ['蒙犽', '东方曜', '老夫子', '典韦', '钟无艳'],\n ['蒙犽', '东方曜', '西施', '鲁班大师'],\n ['蒙犽', '东方曜', '墨子', '孙膑'],\n ['蒙犽', '东方曜', '墨子', '孙膑'],\n ['墨子', '孙膑'],\n ['墨子', '孙膑'],\n ['墨子', '孙膑'],\n ['墨子', '孙膑'],\n ['墨子', '东方曜', '蒙犽'],\n ['墨子', '东方曜', '庄周'],\n ['墨子', '东方曜', '庄周'],\n ['墨子', '东方曜', '西施', '鲁班大师'],\n ['墨子', '孙膑'],\n ['墨子', '东方曜', '庄周'],\n ['孙膑', '墨子', '东方曜', '西施', '鲁班大师'],\n ['孙膑', '墨子', '东方曜', '西施', '鲁班大师'],\n ['孙膑', '墨子', '东方曜', '西施', '鲁班大师'],\n ['孙膑', '墨子', '东方曜', '西施', '鲁班大师'],\n ['孙膑', '墨子', '东方曜', '蒙犽'],\n ['孙膑', '墨子', '东方曜', '庄周'],\n ['孙膑', '墨子', '东方曜', '蒙犽'],\n ['孙膑', '墨子', '东方曜', '庄周'],\n ['孙膑', '墨子', '东方曜', '庄周'],\n ['孙膑', '墨子', '东方曜', '庄周'],\n ['老夫子', '典韦', '钟无艳'],\n ['老夫子', '钟无艳', '典韦'],\n ['老夫子', '钟无艳', '典韦'],\n ['老夫子', '典韦', '钟无艳'],\n ['老夫子', '东方曜', '蒙犽'],\n ['老夫子', '钟无艳', '典韦'],\n ['老夫子', '典韦', '钟无艳'],\n ['老夫子', '钟无艳', '典韦'],\n ['老夫子', '典韦', '钟无艳'],\n ['老夫子', '典韦', '钟无艳'],\n ['钟无艳', '老夫子', '典韦'],\n ['钟无艳', '老夫子', '东方曜', '西施', '鲁班大师'],\n ['钟无艳', '典韦', '老夫子', '东方曜', '墨子'],\n ['钟无艳', '老夫子', '典韦'],\n ['钟无艳', '典韦', '老夫子', '东方曜', '墨子'],\n ['钟无艳', '老夫子', '典韦'],\n ['钟无艳', '典韦', '老夫子', '东方曜', '墨子'],\n ['钟无艳', '老夫子', '典韦'],\n ['钟无艳', '典韦', '老夫子', '东方曜', '西施'],\n ['钟无艳', '典韦', '老夫子', '东方曜', '墨子'],\n ['典韦', '老夫子', '东方曜', '蒙犽'],\n ['典韦', '钟无艳', '老夫子', '东方曜', '墨子'],\n ['典韦', '老夫子', '东方曜', '蒙犽'],\n ['典韦', '钟无艳', '老夫子', '东方曜', '庄周'],\n ['典韦', '钟无艳', '老夫子', '东方曜', '墨子'],\n ['典韦', '老夫子', '钟无艳'],\n ['典韦', '老夫子', '钟无艳'],\n ['典韦', '钟无艳', '老夫子', '东方曜', '墨子'],\n ['典韦', '钟无艳', '老夫子', '东方曜', '庄周'],\n ['典韦', '老夫子', '钟无艳']]"
     },
     "execution_count": 986,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "random_walks"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 987,
   "outputs": [],
   "source": [
    "from gensim.models import Word2Vec  # 自然语言处理"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 988,
   "outputs": [],
   "source": [
    "model = Word2Vec(vector_size=256,  # Embedding维数\n",
    "                 window=2,  # 窗口宽度\n",
    "                 sg=1,  # Skip-Gram\n",
    "                 hs=0,  # 不加分层softmax\n",
    "                 negative=0,  # 负采样\n",
    "                 alpha=0.03,  # 初始学习率\n",
    "                 min_alpha=0.0007,  # 最小学习率\n",
    "                 seed=14  # 随机数种子\n",
    "                 )"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 989,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['东方曜', '老夫子', '墨子', '典韦', '钟无艳', '西施', '孙膑', '鲁班大师', '蒙犽', '庄周']\n"
     ]
    }
   ],
   "source": [
    "# 用随机游走序列构建词汇表\n",
    "model.build_vocab(random_walks)\n",
    "print(model.wv.index_to_key)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 990,
   "outputs": [
    {
     "data": {
      "text/plain": "(2031, 18600)"
     },
     "execution_count": 990,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 训练\n",
    "model.train(random_walks, total_examples=model.corpus_count, epochs=50, report_delay=1)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 991,
   "outputs": [
    {
     "data": {
      "text/plain": "(256,)"
     },
     "execution_count": 991,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 查看某个节点的Embedding\n",
    "model.wv.get_vector('庄周').shape"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 992,
   "outputs": [
    {
     "data": {
      "text/plain": "array([ 2.2453223e-03, -2.4484247e-03, -2.6924093e-03,  1.0963208e-03,\n        3.3878856e-03, -1.4532190e-03,  7.3093921e-04,  3.4757373e-03,\n       -2.2779447e-03,  1.4323355e-03, -8.6157862e-04,  1.7709481e-03,\n        1.5245061e-03, -3.5408954e-03,  1.8691560e-03,  2.7345866e-04,\n       -1.4764089e-03,  1.4728527e-03, -3.1545856e-03,  1.5452579e-03,\n       -7.4888673e-04,  1.4375849e-04,  3.7347726e-03, -3.2266481e-03,\n        2.7257712e-03, -7.4897474e-04,  2.8769304e-03, -3.3517717e-03,\n        1.3850946e-03,  2.9263119e-03,  3.7603886e-03, -1.0992177e-03,\n       -3.2968121e-03, -3.5918630e-03, -3.3668568e-03,  8.3104288e-04,\n        1.2054234e-03, -3.4144633e-03,  3.5829470e-03,  2.5239638e-03,\n       -1.4563263e-03,  4.3595675e-05, -3.7122429e-03, -1.7374447e-03,\n        3.2237265e-05, -3.8277577e-03, -1.0571596e-03, -3.1847069e-03,\n        2.0714165e-03,  2.8329371e-03, -3.1228401e-03, -7.5850077e-04,\n        2.3670862e-03, -1.4486425e-03, -1.6658544e-03, -2.4673562e-03,\n       -2.3770444e-03, -3.7897844e-05, -3.8216156e-03, -3.7584249e-03,\n        2.6105493e-03,  2.8748433e-03, -3.0311802e-03,  2.1952470e-03,\n        2.6251343e-03, -2.1681655e-03, -3.3821519e-03,  1.4086668e-03,\n        1.3541644e-03, -2.6242947e-04,  2.4630586e-03,  2.5288421e-03,\n       -3.8268617e-03,  3.4503168e-03, -2.4174009e-03,  2.8364430e-03,\n       -2.8807372e-03,  2.3583663e-03, -1.4906731e-03,  3.6810101e-03,\n       -1.1835769e-03, -2.0229006e-03,  1.5634471e-03,  1.1349092e-03,\n       -3.8729762e-03, -1.8652203e-03,  2.2405125e-03,  2.2795261e-03,\n       -3.3219140e-03, -2.2414168e-03, -2.1112254e-03,  3.8330932e-03,\n        2.6075607e-03, -2.5476548e-03, -3.5030507e-03, -1.9254596e-03,\n       -1.7002174e-03, -3.5215169e-05, -1.7233198e-03, -3.4725037e-03,\n        3.5461811e-03, -1.7876499e-03,  4.9117440e-04,  8.4876921e-04,\n       -3.8305037e-03, -1.9662487e-03,  2.2417339e-03,  2.4603414e-03,\n       -2.7054399e-03, -3.1659938e-03, -9.5990021e-04, -3.1964658e-03,\n        2.6345123e-03,  1.5653842e-03, -5.7927938e-04, -4.6868622e-04,\n        3.2829172e-03, -3.8448144e-03, -2.4331557e-03,  1.5197578e-03,\n        2.7188687e-03,  3.0105379e-03,  1.6579032e-03, -3.6223182e-03,\n        2.3557493e-03,  3.7982664e-03,  2.9915851e-03,  3.1447276e-03,\n       -1.4848700e-03,  2.1610018e-03,  1.2952522e-03,  2.0240326e-03,\n       -2.4238578e-03,  7.1271928e-04, -3.6358186e-03,  1.7539589e-03,\n        3.6255890e-03,  1.4095828e-03, -2.5408599e-03, -3.4011663e-03,\n       -3.6478001e-03, -3.1119087e-03,  1.0988433e-03, -3.2057581e-03,\n       -1.2580790e-03, -2.4924953e-03,  7.5677643e-04,  3.0561471e-03,\n       -3.7156241e-03, -1.1561606e-03,  4.8372755e-04, -2.1929056e-03,\n        2.3095375e-03, -2.4809558e-03,  1.1664396e-03,  1.8830034e-03,\n        1.5207147e-03, -5.4235244e-04, -3.2877135e-03,  2.0208228e-03,\n       -3.1646779e-03, -1.7318218e-03,  2.5759391e-03, -9.1192406e-04,\n        3.5748198e-03, -5.7137012e-04,  2.7173595e-03, -4.2150589e-04,\n       -4.5857392e-05, -2.9035117e-03,  1.0181917e-04,  1.0500792e-03,\n        1.2171846e-03, -7.2157895e-04,  9.1307098e-04,  3.4475997e-03,\n       -2.4651056e-03,  3.2469002e-03, -2.4310332e-03,  4.1086180e-04,\n       -2.6099780e-03,  1.2180065e-03,  2.1661734e-03,  1.9319416e-03,\n        3.8216310e-04,  3.5122395e-03,  1.4195326e-03, -3.6687120e-03,\n       -1.9515068e-03, -1.5690927e-03, -8.8628242e-04,  2.6329695e-03,\n        2.6787068e-03,  3.5680188e-03, -3.3522951e-03, -1.2389058e-04,\n       -2.7049496e-03,  1.1396692e-03,  3.8823909e-03,  1.7637103e-03,\n        3.3898372e-04,  8.0523686e-04,  1.2556664e-03, -2.5330242e-03,\n        6.6745142e-04,  2.0858245e-03, -9.2579471e-04, -5.9840875e-04,\n        3.3145668e-03,  2.1677730e-03, -3.3311481e-03, -3.8713193e-03,\n        2.6906682e-03,  1.0998296e-03,  9.6431468e-04,  3.4386674e-03,\n       -9.9597964e-04,  6.5639475e-04, -1.0720869e-03,  2.6633586e-03,\n        1.1559678e-03, -5.5674044e-04,  2.1814667e-03,  5.2463729e-05,\n       -4.4058077e-04, -2.7769865e-03, -3.4860098e-03,  2.2857636e-04,\n        1.3610609e-03, -1.7555710e-03, -2.6171198e-03,  4.0302891e-04,\n       -9.5589925e-04,  1.2211758e-03,  8.2640303e-04, -1.5608966e-03,\n       -1.3977028e-03, -5.5046333e-04,  1.5215990e-03, -2.4748556e-03,\n       -3.0583735e-03, -2.9617646e-03,  3.2662023e-03,  3.3646543e-04,\n        2.9301639e-03,  1.3478426e-04, -1.4712610e-03,  3.8588075e-03,\n       -3.3861632e-04, -2.6402664e-03,  1.0636635e-03, -1.8614796e-03,\n       -1.3730638e-03, -2.3267451e-03, -1.4733667e-03,  2.1826057e-04],\n      dtype=float32)"
     },
     "execution_count": 992,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 得到一个低位连续稠密的向量，反映了节点在图里的连接信息，集群信息和一些语义信息\n",
    "model.wv.get_vector('庄周')"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 993,
   "outputs": [
    {
     "data": {
      "text/plain": "[('老夫子', 0.06426718086004257),\n ('东方曜', 0.03812619298696518),\n ('鲁班大师', 0.0050691948272287846),\n ('墨子', -0.010630287230014801),\n ('孙膑', -0.013383989222347736),\n ('典韦', -0.016376059502363205),\n ('蒙犽', -0.03800806775689125),\n ('西施', -0.04246104136109352),\n ('钟无艳', -0.07955959439277649)]"
     },
     "execution_count": 993,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 找相似词语\n",
    "model.wv.similar_by_word('庄周')"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 994,
   "outputs": [],
   "source": [
    "# 将Embedding用TSNE降维到2维\n",
    "\n",
    "\n",
    "X = model.wv.vectors\n",
    "tsne = PCA(n_components=2)\n",
    "embed_2d = tsne.fit_transform(X)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 995,
   "outputs": [
    {
     "data": {
      "text/plain": "array([[-0.00274549,  0.01343207],\n       [ 0.00382267, -0.01581996],\n       [ 0.01693253,  0.00417574],\n       [ 0.00859713, -0.01722231],\n       [ 0.02228129,  0.02088283],\n       [-0.01833049,  0.00969682],\n       [-0.01461704,  0.00029586],\n       [-0.01432894,  0.00340615],\n       [-0.00588312, -0.00204799],\n       [ 0.00427148, -0.01679922]], dtype=float32)"
     },
     "execution_count": 995,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "embed_2d"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 996,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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mU6/nWoezX92Nx17XUPC5CH+5i+//JLXXnuNjz76iPHjx/Pee+8xceJEevXqxXPPPcfo0aMBaNKkCbNmzarsNEVE6hyvRSSJgump9UBvYIfHmOJx7xbGrfeYU5keGt61xO1UG/+/mwmrF8xDw0ue59GtWzemT5/uXy46LwQgLi6ustMSEanzvBaRBcBqM2sLjATGmtlTzrmp5cT0LaOv14EPzWwgcBnwqcecynTq7VTbtWgU0O1URUSkfJ7PWC880moYsMo5t99rTGFcWwpGI0uccxnl/dyzPWNdROR8VOvOWHfOpXHyqCrPMYVxKYHEiYhI7aKr+IqIiGcqIiIi4pmKiIiIeKYiIiIinqmIiIiIZyoiIiLimYqIiIh4piIiIiKeqYiIiIhnKiIiIuKZioiIiHimIiIiIp6piIiIiGcqIiIi4pmKiIiIeKYiIiJSQbm5ueTn59d0GrWC55tSiYici958802eeuopmjRpQmZmJs45nHM0aNCAESNGMG3aNN566y3eeustfL6Tf4cfPnyYzz77jHfeeYfbbrutBregenkuImb2CtAd+NA591SgMae2mVkw8E3hA2CSc26L17xERM5GvXr1uO+++zh48CCXXXYZubm5LF26lLvuuouVK1cCMGHCBCZMmOBfJz4+nscee4wPPviA0aNH11TqNcJTETGzaCDIOdffzGaaWWfn3M4zxQA9S2lrBPyfc+7hs90YEZGz1axZM2bOnAnA/Pnzcc7Rpk0b/vCHP3D77befFv/qq68yb948Fi1aRNOmTas525rndSQSycl7oscDA4CdAcT0KaUtDLjZzH4K7AUmOOdyi3dkZvcA9wC0b9/eY8p109GjRwkPDz+rPhISEmjRogXdunUjJCTE356fn09+fj7BwZrVFClu9OjRBAcHk5SURF5eHldffTU5OTl07tyZ3NxcfD6ffyorNTWVCRMm+AtIVlYWAKGhoTWVfrXy+tsjHEgufJ4JdAowprS2j4FBzrnvzexvwCjg/eIdOedmA7MBIiIinMeca4WsrCxuvvlm7rzzTlq1akVQUBADBw4EIC0tje+++w4zo1mzZlx00UWMHDmS6dOnc+LECZxz/OQnP+GSSy4p0eebb75Js2bNuP7660v9mZ9++imdOnXiN7/5DcHBwWzYsIErrrgCM+Oee+7hlltuqfLtFqnNFmxM5tklO/h641qO/fsdOl3YghbhIeTk5OCc48MPP8Tn8/HBBx8wduxY4uLiMDMA9uzZQ1hYGC+//LK/v/vuu4+oqKga2prq5bWIHKFgBAHQkNKP8iotprS2zc657MK2L4HOHnOq9TIyMvj1r3/NHXfcQVhYGKtWreLgwYP+IpKamsrrr7/O9u3beeihh7joooto1KgRGRkZ/OUvf+GGG26gTZs2p/X77bffltjBV2TdunXMmTOHiy++mPDwcJYvXw4U/JX17rvvnjd/KYmUZ8HGZB6Zt4XjOXmEXtqHI1vjOdw9iiuaHuaO0YNo0qQJc+fOJSYmht/+9rfExMQQExPjX/9Pf/oTHTp04NZbb63Brag5XotIEgVTUeuB3sCOAGP2ldL2v2b2NPAFcDPwPx5zqtU2bNjAb3/7W7Zu3cq+ffv44YcfyM7Opm3btnTp0oXHHnuMO+64g1/84hcsXLiQrl27Mm3aNEJDQxk5ciSLFi1i1KhRdOjQgby8PLKzs2nQoAEAeXl5NGrUCCiYojp27BihoaGEhIQQFhbmz2Hy5Mns2rWLpKQkbr/9dvLz8/nrX//KRRddVCPviUht8OySHRzPyQMgL+sIwU0vxLXowBf1L2bbtm1ccsklDBs2jLZt2zJq1Ciys7OpX79+DWdde3gtIguA1WbWFhgJjDWzp5xzU8uJ6Qu4Uto2A28DBrzvnFvuMadarUuXLrz88svcdtttREVFsW3bNtLT0+nfvz9r164lODiYo0eP8vXXX5Oamsru3bv58ccfCQ0NZefOnaSlpbFz505atGjBwYMHGTdunH9fxu7duwkPD+ePf/wjANnZ2fzjH/84LYfPPvuMJUuWEBUVxdtvv83EiRPJycmp1vdBpLZJST/ufx4U2pDQS3qROu8pUn1BvNo4h/z8fNq3b8/zzz/P2LFjTysgOTk5/qmt85GnIuKcyzSzSGAY8Ixzbj+w6QwxGQCltGUAvTxlXwcUzbWmpB+nZdBxsghhwYIFJ18vfN6iRQt++OEHli5dyq5du/j0009p0KABOTk5rF69mm+++YalS5fSqVMnOnbsyPr16/19/OxnP6N9+/a8+uqrJX52YmIiAM45fD5fqR/08/nDLwLQtmkYyYWF5Niuf/Nj0gdYUDChPoeZ4fP5yM3Nxcx47bXXaNSokX9/R2xsLMuWLSMuLq4Gt6BmeT4sxzmXxskjrQKOCWS9c0XxudbslB3s3L2Bek17ENHzQi5v16RE7IYNG8jIyOD+++9n4cKFPPjgg+Tk5DBhwgTuvPNONmzYwK9//Ws6dOhQYr1t27YRHh7O4cOH2bFjB127dvW/VnSS1IEDB2jWrFl1bLJInfPQ8K7+72mDTlfToNPVhIUEMS26J1F92pW77osvvlg9SdZiOrazChWfa63ftiv123Zl31/vYP437dnTvqk/bu/evbzxxhsMHDjQP3rYs2cP3377Lb16lT1Iy87O5te//jUvvvgiYWFh3H333SxevNi/r6RRo0Z07dqVWbNm8fvf/77EZRq2bNnCpk2bzvrwYZG6rqhQFM0YtG0axkPDu56xgEgBFZEqVHyutUhQw+YEd/4pY2/u6W9bvHgxISEhpKWlsXDhQv75z3/SvHlzEhISePHFF8nLKyhEzjlycnIICQnhyy+/5N577+WOO+6gd+/eAMTExDBs2DBee+01OnfuTLdu3fjggw/o37+//5INPp8P5xyNGjXihRdeoFWrVtXzZojUYlF92qloeKQiUoWKz7UCOJdPbsYBcnd+wpw5W/3te/fuJScnh/j4eOrVq8e2bdt444036NKlC8eOHeOmm24iODiY2NhYBg8eTKtWrXj00Ud56aWXGDlypL+fMWPGEBoays9+9jNWr17Nt99+y5o1a5g7t2D28He/+x1QMIJp06YN3bp1q6Z3QkTOVeZc3Tp3LyIiwhVN+dR2xfeJFAn15TP951ee8a+eo0ePEhISQr169U57LScnh+PHj9O4ceMy1y2apnLOaee5iGBmSc65iMruVyORKnQ2c63l7asICQkpcfmS8tZVARGRqqQiUsU01yoi5zLdlEpERDxTEREREc9URERExDMVkSpWdM8OL55++ulKzkZEpHKpiFSx1atXc+2113LttdeWuPR6ZGRkibgLL7yQAQMG8F//9V/+tnfeeYcDBw5UV6oiIhWmIlLFBg0axJo1a+jfvz+zZs3ytzds2PC0uDfffJOgoCBatGhBZGQkzZs3Z8yYMXTo0IGPP/64ulMXETkjHeJbDQ4fPkxCQgLTp0/nscce849ClixZwvbt24mNjSU9PZ2NGzf67zbYqlUrMjIySEtL49577y31ZlQiIjVNI5FqEBISwvfff09sbCybN2+me/fuAPTq1Yv33nsPgIMHD7Jy5UrMjN/85jfExcVxzTXXMHbsWEaPHk2PHj1qchNEREqlIlIFFmxM5qfT47l08iK63fF7+lwzgGbNmvE///M/HD58mLZt2wIF+0Fyc3M5evQoXbp0ITY2FgCfz8fu3buZPXs20dHRTJw4sQa3RkSkbCoilazoelnJ6cdxwLGW3fGNfpzc4DBSUlK4+OKLS8Rfc801rF27lqSkJCZPngwUXBtryJAhLFiwgIiICF599VVyc3NrYGtERMrnuYiY2StmttbMplYkJtC2uqr4PUQAfPUbkJ1vfHf4OJs2bWL48OEl4q+99lr279/PoEGDmD59Onl5efz85z9nz549REZGcuTIEYYMGcKcOXOqe1NERM7I0451M4sGgpxz/c1sppl1ds7tPFMM0DOQtlP7qktKu4fIkc3LOJFv3HLLLQB89NFHpKWlARAdHc0nn3zCd999h3OO4OBgVq1axQMPPMCTTz7JunXryMnJ4eabb67W7RARCYTXkUgkJ29xGw8MCDAm0LY6q23TsNPaLDiErjfF+Je/+uqrEicSLlq0iFGjRnHnnXfSpUsXxo0bR48ePWjRogVDhw7l73//O/Hx8dWSv4hIRXg9xDccSC58ngl0CjAm0LYSzOwe4B6A9u3be0y5ehS/X3ORVleN5Inok3cyfOCBB0qs89///d+Ehoby7rvv0qJFCwYNGkSXLl0ACA0N5V//+lep9xUREalpXkciR4CiP7kbltFPaTGBtpXgnJvtnItwzkXU9tu5RvVpx7TonrRrGoYB7ZqGMS26Z7mXgy86k71FixYA/gJSpEmTJoSFnT7COZc451i6dCkAM2fOpK7dLE3kfOV1JJJEwbTTeqA3sCPAmH0BttVpuodISV9//TVr167FzHj22Wd58MEHSUlJ4aOPPuLuu+/GOceVV17JvHnzeOGFFxg8eDAzZswgLi4OM+Obb76hefPmPProo0RHR9f05ohIMV6LyAJgtZm1BUYCY83sKefc1HJi+gIuwDY5hzRq1IguXboQFBTE4MGD6dGjB61btyYrK4tu3bqRn59P06ZNGTZsGL/61a9YtGgRWVlZDBw4kD59+vDEE08wevRoIiIq/c6eInKWPBUR51ymmUUCw4BnnHP7gU1niMkACLRNzh0//vgjN9xwA5dddhkAn3/+uf+1lStX8uWXX/LII48wb948hgwZwpYtW0hLSyMu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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(embed_2d[:,0],embed_2d[:,1])\n",
    "words = list(model.wv.key_to_index)\n",
    "for i,word in enumerate(words):\n",
    "    plt.annotate(word,xy=(embed_2d[i,0],embed_2d[i,1]))\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 996,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}